package com.test.factory;

import com.test.exception.BeansException;

/**
 * Bean工厂接口，用于管理和提供Bean实例
 * 它定义了一系列方法来获取Bean实例，检查Bean是否存在等
 */
public interface BeanFactory {

    /**
     * 根据Bean的名称获取Bean实例
     *
     * @param name Bean的名称
     * @return 返回请求的Bean实例
     * @throws BeansException 如果获取Bean实例时出现错误
     */
    Object getBean(String name) throws BeansException;

    /**
     * 根据Bean的名称和所需的类型获取Bean实例
     *
     * @param name Bean的名称
     * @param requiredType 要求的Bean类型
     * @return 返回转换为所需类型的Bean实例
     * @throws BeansException 如果获取Bean实例时出现错误
     */
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

    /**
     * 根据所需的类型获取Bean实例
     *
     * @param requiredType 要求的Bean类型
     * @return 返回转换为所需类型的Bean实例
     * @throws BeansException 如果获取Bean实例时出现错误
     */
    <T> T getBean(Class<T> requiredType) throws BeansException;


    <T> T getBean(String name, Object... args) throws BeansException;



    /**
     * 检查Bean工厂中是否包含指定名称的Bean
     *
     * @param name Bean的名称
     * @return 如果包含指定名称的Bean则返回true，否则返回false
     */
    boolean containsBean(String name);
}
